import concurrent.futures
import time

def initializer():
    print("初始化线程")

def task(n):
    # 模拟一个耗时任务
    # time.sleep(2)
    return f"任务{n}完成"


with concurrent.futures.ThreadPoolExecutor(max_workers=5, initializer=initializer) as executor:
    # 提交任务
    futures = [executor.submit(task, i) for i in range(10)]


    # 获取任务结果
    for future in concurrent.futures.as_completed(futures):
        print(future.result())


# 创建一个进程池
# with concurrent.futures.ProcessPoolExecutor(max_workers=5) as executor:
#     # 提交任务
#     futures = [executor.submit(task, i) for i in range(10)]
#
#     # 获取任务结果
#     for future in concurrent.futures.as_completed(futures):
#         print(future.result())

# if __name__ == '__main__':
#     # 创建一个线程池
#     pool = concurrent.futures.ThreadPoolExecutor(max_workers=5, initializer=initializer)
#
#     # 提交任务，列表推导式，返回一个列表
#     futures = [pool.submit(task, i) for i in range(10)]
#
#     # 获取任务结果
#     for future in concurrent.futures.as_completed(futures):
#         print(future.result())


'''
在这个示例中，我们创建了一个线程池和一个进程池，分别使用 ThreadPoolExecutor 和 ProcessPoolExecutor 类。
我们提交了 10 个任务到线程池和进程池中，任务函数 task 模拟了一个耗时任务。
我们使用 as_completed 函数获取任务结果，当任务完成时，会打印任务结果。

注意：

max_workers 参数指定了线程池或进程池的最大工作线程数或进程数。
submit 方法用于提交任务到线程池或进程池中。
as_completed 函数用于获取任务结果，当任务完成时，会返回任务结果。
使用 concurrent.futures 模块可以简化并发编程，提高程序的效率。

'''